#include <iostream>
#include <set>
#include <map>
#include <vector>
#include <string>
#include <iterator>
#include <utility>
#include "AST.h"
#include <algorithm>
#include "IRGenerator.h"
#include "utils.h"
#include "visit.h"
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::set;
using std::map;
using std::vector;
using std::pair;

struct StackElement {
    string symbol;   // 符号（如 "program", "ID" 等）
    ASTNode* node;    // 对应的AST节点指针
};

struct charNode{
    string type;
    string value;
};

void getVnVt();
void getFirst(string token);
bool getFollow();
void getChars(string str);

bool doAnalysis();
bool analysis();

void print_first();
void print_follow();
void print_table();
void printAST(ASTNode* node, int depth);
void AST_NodeTraversal_ValueAssignment(ASTNode* node);

void syntax();
